//============================================================================
// Name        : BibliotecaDeCanciones.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <ostream>
#include <string>
#include <cstddef>
#include <stdlib.h>
/************PRUEBAS SACAR****************************/
#include "./Logica/HashExtensible/HashExtensible.h"
#include "./Logica/ArbolBMas/ArbolBMas.h"
#include "./Logica/Compresor/PPMC/PPMC.h"
/****************************/
#include "./Logica/Estadistica/Estadistica.h"
#include "./Aplicacion/BiblioDeCanciones.h"
using namespace std;

void Indexar(BiblioDeCanciones* biblioteca) {
	//Levanta el indexador generando todas las estructuras
	biblioteca->Indexar();
}
void SeleccionarOrigen(BiblioDeCanciones* biblioteca) {
	//Cambia la carpeta de origen del indexador
	cout << endl << "Seleccione una ruta de Origen" << endl;
	string cadena;
	cin >> cadena;
	while ( biblioteca->NuevoOrigen(cadena) != 0 ) {
		cout << "Ingrese un origen valido" << endl;
		cin >> cadena;
	}
	cout << "El origen se ha cambiado satisfactoriamente" << endl;
}
void SeleccionarDestino(BiblioDeCanciones* biblioteca) {
	//Cambia la carpeta destino del indexador
	cout << endl << "Seleccione una ruta de Destino" << endl;
	string cadena;
	cin >> cadena;
	string aux;
	getline(cin, aux);
	cadena = cadena + aux;
	while ( biblioteca->NuevoDestino(cadena) != 0 ) {
		cout << "Ingrese un destino valido" << endl;
	}
	cout << "El destino se ha cambiado satisfactoriamente" << endl;

}
void BuscarAutor(BiblioDeCanciones* biblioteca, Estadistica* unaEstadistica){
	//Cambia la carpeta destino del indexador
	cout << endl << "Ingrese Autor a Buscar" << endl;
	string cadena;
	cin >> cadena;
	string aux;
	getline(cin, aux);
	cadena = cadena + aux;
	biblioteca->BuscarAutor(&cadena);
	unaEstadistica->agregarAutor(cadena);
}
void BuscarTitulo(BiblioDeCanciones* biblioteca,Estadistica* unaEstadistica){
	cout << endl << "Ingrese un Titulo a Buscar" << endl;
	string cadena;
	cin >> cadena;
	string aux;
	getline(cin, aux);
	cadena = cadena + aux;
	biblioteca->BuscarTitulo(&cadena);
	unaEstadistica->agregarTitulo(cadena);
}

void BorrarLetra(BiblioDeCanciones* biblioteca){
	cout << endl << "Ingrese el id de la letra a borrar" << endl;
	unsigned int id;
	cin >> id;
	biblioteca->BorrarID(id);
}

void BuscarLetra(BiblioDeCanciones* biblioteca,Estadistica* unaEstadistica){
	cout << endl << "Ingrese una Letra a Buscar" << endl;
	string cadena;
	cin >> cadena;
	string aux;
	getline(cin, aux);
	cadena = cadena + aux;
	biblioteca->BuscarLetra(&cadena);
	unaEstadistica->agregarfrase(cadena);
}

void MostrarCancion(BiblioDeCanciones* biblioteca){
	cout << endl << "Ingrese el id de la cancion a mostrar" << endl;
	unsigned int id;
	cin >> id;
	biblioteca->MostrarCancion(id);
}

void borrarTodo(BiblioDeCanciones* biblioteca){
	biblioteca->BorrarTodo();
}


void ImprimirMenu() {
	cout << "BIBLIOTECA DE CANCIONES" << endl << endl;
	cout << "OPCIONES:" << endl << endl;
	cout << "1-Indexar Canciones" << endl;
	cout << "2-Seleccionar carpeta de origen" << endl;
	cout << "3-Seleccionar carpeta destino" << endl;
	cout << "4-Buscar por autor" << endl;
	cout << "5-Buscar por titulo" << endl;
	cout << "6-Buscar por frase" << endl;
	cout << "7-Ver cancion" << endl;
	cout << "8-Borrar cancion" << endl;
	cout << "9-Ver estadisticas de busquedas" << endl;
	cout << "10-Salir" << endl;
	cout << "11-Probar PPMC" << endl;
	cout << "12-Borrar Todo" << endl;
}

/*Lanzar el menu del programa*/
int main(int argc, char **argv) {
	int input = 0;
	BiblioDeCanciones* biblioteca = new BiblioDeCanciones();
	Estadistica * unaEstadistica = new Estadistica();
	while ( input != 10) {
		ImprimirMenu();
		cin >> input;
		switch ( input ) {
			case 1:
				Indexar(biblioteca);
				break;
			case 2:
				SeleccionarOrigen(biblioteca);
				break;
			case 3:
				SeleccionarDestino(biblioteca);
				break;
			case 4:
				BuscarAutor(biblioteca,unaEstadistica);
				break;
			case 5:
				BuscarTitulo(biblioteca,unaEstadistica);
				break;
			case 6:
				BuscarLetra(biblioteca,unaEstadistica);
				break;
			case 7:
				MostrarCancion(biblioteca);
				break;
			case 8:
				BorrarLetra(biblioteca);
				break;
			case 9:
				unaEstadistica->ejecutarMenuEstadisticas(biblioteca);
				break;
			case 10:
				borrarTodo(biblioteca);
				break;
			default:
				break;
		}
	}
	delete biblioteca;
	delete unaEstadistica;
	return 0;
}




